2022年2月 Cloud Functions 第二代釋出,提供更長的執行時間、更大的執行資源...等。
圖取自 Cloud Functions version comparison
分為 HTTP triggers
和 Event triggers
GET
、POST
、PUT
、DELETE
以及 OPTIONS
一個 Function 只能設定一個觸發條件,可以部署多個 Function 被同一個事件所觸發。
部署有兩種方式:
Google Cloud console
Google Cloud CLI
*以下內容取自:Create a 2nd gen Cloud Function by using the Google Cloud console
// 使用 @google-cloud/functions-framework 函式庫來建立 Cloud Functions
const functions = require('@google-cloud/functions-framework');
// 指定函式類型以及函式名稱
functions.http('helloHttp', (req, res) => {
res.send(`Hello ${req.query.name || req.body.name || 'World'}!`);
});
// 函式有三種類型 (對應到觸發條件)
// HTTP-triggered functions
// Background functions
// CloudEvent functions
*以下內容取自:Create a 2nd gen Cloud Function by using the Google Cloud CLI
gcloud CLI 包含
gcloud
、gsutil
、bq
,可用來取得 Compute Engine、Cloud Storage、 BigQuery 等其他產品服務的 command line 工具。
gcloud init
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd nodejs-docs-samples/functions/helloworld/helloworldGet/
gcloud functions deploy nodejs-http-function \
--gen2 \
--runtime=nodejs20 \
--region=asia-east1 \
--source=. \
--entry-point=helloGET \
--trigger-http \
--allow-unauthenticated
相關參數可參考gcloud functions deploy 官方文件
其他常用指令:
gcloud config list
gcloud config set functions/region asia-east1
gcloud functions delete nodejs-http-function --gen2 --region asia-east1
Google Cloud 提供很多 Cloud Functions 基本範例,可依照使用的程式語言做篩選。
例如:利用全域變數計算 Functions 呼叫次數,範例來源:Statelessness
全域變數,可在之後的呼叫使用。所有的 Functions 可以使用共用的變數。
建立 count 變數,用來計算 Functions 的呼叫次數 (非 Functions 總呼叫次數,因每部署一次,count 會歸零)
const functions = require('@google-cloud/functions-framework');
// Global variable, but only shared within function instance.
let count = 0;
/**
* HTTP Cloud Function that counts how many times
* it is executed within a specific instance.
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
functions.http('executionCount', (req, res) => {
count++;
// Note: the total function invocation count across
// all instances may not be equal to this value!
res.send(`Instance execution count: ${count}`);
});
例如:在 Cloud Functions 中再去發送 HTTP request,範例來源:Send HTTP requests
若使用的是 HTTP Cloud Functions,代表需要對進來的請求做處理,返回 res
可用externalRes
和res
做區隔
const fetch = require('node-fetch');
const functions = require('@google-cloud/functions-framework');
/**
* HTTP Cloud Function that makes an HTTP request
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
functions.http('makeRequest', async (req, res) => {
const url = 'https://example.com'; // URL to send the request to
const externalRes = await fetch(url);
res.sendStatus(externalRes.ok ? 200 : 500);
});
Google推新一代無伺服器函式服務Cloud Functions,具60分鐘執行時間、更大的執行個體